<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
//         从 对象实例 获得 父级原型对象：

// 方法一： 对象实例.__proto__        【 有兼容性问题，不建议使用】

// 方法二：Object.getPrototypeOf( 对象实例 )

// 所以无论从语义的角度，还是从兼容性的角度，都不要使用这个属性，
// 应该使用：Object.getPrototypeOf(target)（读操作）
// 、Object.setPrototypeOf(target)（写操作）、Object.create(target)（生成操作）代替
// 构造函数是什么、它做了什么

 
        let a={};
        console.log(a.__proto__);//undefine 有兼容性的问题,不建议使用
      console.dir(Object.getPrototypeOf(a));
     
      //向a的父类中添加方法
      Object.getPrototypeOf(a).show=function(v){
          console.log(v);
      };
      a.show(250)

//如果自己有show方法，父类也有这个方法show，就相当于重写父类方法
//如果父类有，但是子类我没有。就相当于继承
  //函数也有原型
  function user(){}
  function user1(){}
// console.dir(user.__proto__);
// console.log(user.prototype);
// console.log(user.__proto__ == user.prototype);//false
console.log(user.prototype==user1.prototype);//false


// ①__proto__和constructor属性是对象所独有的；
// ② prototype属性是函数所独有的
// 但是由于JS中函数也是一种对象，所以函数也拥有__proto__和constructor属性
    </script>
</body>
</html>